From: Harald Jörg Date: Thu, 16 May 2024 20:22:37 +0000 (+0200) Subject: ; cperl-mode.el: prevent Emacs from "freezing" (Bug#70948) X-Git-Tag: archive/raspbian/1%30.1+1-3+rpi1^2~14^2~18^2~1476 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=54a7268763138fdc63bf81feca99013b01337872;p=emacs.git ; cperl-mode.el: prevent Emacs from "freezing" (Bug#70948) * cperl-mode.el (defconst): Replace the rx expression for `cperl--basic-identifier-rx' with its actual macro expansion. This makes it efficient under Emacs 29.3, where the expansion by rx.el could make Emacs freeze with a crafted Perl source (Bug#70948). --- diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el index 81ecb535b82..cbc23507fca 100644 --- a/lisp/progmodes/cperl-mode.el +++ b/lisp/progmodes/cperl-mode.el @@ -1178,7 +1178,12 @@ The expansion is entirely correct because it uses the C preprocessor." (eval-and-compile (defconst cperl--basic-identifier-rx - '(sequence (or alpha "_") (* (or word "_"))) + ;; The rx expression in the following line is a workaround for + ;; bug#70948 under Emacs 29 + '(regex "[_[:alpha:]][_[:word:]]*") + ;; The rx expression in the following line is equivalent but + ;; inefficient under Emacs 29.3 + ;; '(sequence (or alpha "_") (* (or word "_"))) "A regular expression for the name of a \"basic\" Perl variable. Neither namespace separators nor sigils are included. As is, this regular expression applies to labels,subroutine calls where